// backend/services/logger.js
const winston = require('winston');
require('winston-daily-rotate-file');
const path = require('path');
const fs = require('fs');

const logDir = path.join(__dirname, '..', 'logs');

// 确保日志目录存在
if (!fs.existsSync(logDir)) {
  fs.mkdirSync(logDir);
}

// 定义日志级别
const levels = {
  error: 0,
  warn: 1,
  info: 2,
  generation: 3, // 自定义一个级别，专门用于记录生成详情
  debug: 4,
};

// 定义不同级别的颜色
const colors = {
  error: 'red',
  warn: 'yellow',
  info: 'green',
  generation: 'blue',
  debug: 'white',
};
winston.addColors(colors);

// 定义日志格式
const format = winston.format.combine(
  winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
  winston.format.printf((info) => `${info.timestamp} ${info.level}: ${info.message}`)
);

const logger = winston.createLogger({
  levels,
  format,
  transports: [
    // 1. 在控制台输出的配置
    new winston.transports.Console({
      format: winston.format.combine(
        winston.format.colorize({ all: true }) // 为所有级别启用颜色
      ),
    }),

    // 2. 写入常规运行日志文件的配置
    new winston.transports.DailyRotateFile({
      level: 'info', // 此文件只记录 info 及以上级别的日志
      filename: path.join(logDir, 'info-%DATE%.log'),
      datePattern: 'YYYY-MM-DD',
      zippedArchive: true, // 自动压缩旧日志
      maxSize: '20m',      // 单个文件最大20MB
      maxFiles: '14d',     // 最多保留14天
    }),

    // 3. 专门写入AI生成详情日志文件的配置
    new winston.transports.DailyRotateFile({
      level: 'generation', // 此文件只记录 'generation' 级别的日志
      filename: path.join(logDir, 'generations-%DATE%.log'),
      datePattern: 'YYYY-MM-DD',
      zippedArchive: true,
      maxSize: '20m',
      maxFiles: '30d', // 生成日志可以多保留一些时间
      // 使用JSON格式记录，方便阅读和机器分析
      format: winston.format.combine(
        winston.format.timestamp(),
        winston.format.json()
      ),
    }),

    // 4. 写入错误日志文件的配置
    new winston.transports.DailyRotateFile({
      level: 'error',
      filename: path.join(logDir, 'error-%DATE%.log'),
      datePattern: 'YYYY-MM-DD',
      zippedArchive: true,
      maxSize: '20m',
      maxFiles: '14d',
    }),
  ],
});

module.exports = logger;